# 此文件内容为测试相关的配置文件
import datetime
import os.path
import sys
from selenium import webdriver
from selenium.webdriver.edge.service import Service


# 创建一个浏览器配置
class Driver:
    # 类成员
    driver = ""
    # 为每个方法保存一个独立的计数器
    _shot_counters = {}  # 类变量，{方法名: 序号}

    # def __int__(self) 实例被强制转换成 int 时，Python 会自动调用它，并把你返回的整数当作转换结果
    def __init__(self):
        # service表示指定的浏览器的服务，options表示浏览器的参数配置。
        # EdgeChromiumDriverManager().install()，webdriver-manager 去官方源检测 OS、版本，下载 / 缓存最新的 msedgedriver.exe，并返回其绝对路径。
        options = webdriver.EdgeOptions()
        # self.driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()),options=options)
        # 由于我这边显示无法⾃动下载和安装浏览器，所以我选择了手动安装将路径给出
        self.driver = webdriver.Edge(service=Service("D:\\Browsers\\edgedriver_win64\\msedgedriver.exe"),options=options)

    # 创建屏幕截图
    def getScreeShot(self):
        # 图片文件名称：调用函数-照片编号-20xx-xx-xx-xxx.png
        now = datetime.datetime.now()
        dirname = now.strftime("%Y-%m-%d")
        # 创建文件Images文件夹是否已经存在，若不存在则创建文件夹
        img_dir = f"../Images/{dirname}"
        os.makedirs(img_dir, exist_ok=True)

        # 图片的路径：../Images方法名-20xx-xx-xx/20xx-xx-xx-xx.png
        # sys._getframe()拿到调用者栈帧，.f_back是往回跳一帧，因为它是写在Utils里面的，而调用者在上一桢。
        # .f_code具体到代码对象，.co_name这段代码的名称
        caller = sys._getframe(0).f_back.f_code.co_name
        # 计数器递增
        count = ForumDriver._shot_counters.get(caller, 0) + 1
        ForumDriver._shot_counters[caller] = count

        filename = f"{caller}-{count:03d}-{now.strftime('%Y-%m-%d-%H-%M-%S')}.png"
        self.driver.save_screenshot(os.path.join(img_dir, filename))


# 创建Driver类对象，其它类调用通过ForumDriver调用
ForumDriver = Driver()